np=10
#####################################################################
r1a=(-50)
r1b=50
######################################################################
dim=3
######################################################################
genMax=70
####################################################   function bed set     ######################################
f1=function(x1,x2){
x1^2*sin(x2)
}
######################################################################
f2=function(p1,p2,p3){
p1*p2*sin(p3)
}
#######################################################################
f3=function(p1,p2,p3){
p1*p1+p2*p2+p3*p3
}
#######################################################################
initGen=function(){
n=1
g=matrix(1:(np*dim),np,dim)
for(n in n:np){ m=1
for(m in m:dim){
g[n,m]=runif(1, r1a, r1b) } }
g
}
######################################################################
initializeCost=function(fun,g,cost){
i=1

for(i in i:np){
if(dim==2)
cost[i]=fun(g[i,1],g[i,2])
if(dim==3)
cost[i]=fun(g[i,1],g[i,2],g[i,3])
}#for
cost
}
######################################################################
if(dim==2 || dim==1){

x1=seq(r1a,r1b,by=.2)
x2=seq(r1a,r1b,by=.2)

fplot=function(x1, x2){
z=outer(x1,x2,f1)
persp(x1,x2,z)
}
#######
fplot(x1,x2)
}#if
######################################################################
diffEvol=function(fun){
curMin=count=g=cost=true=0
g=initGen()
cost=initializeCost(fun, g, cost)
CR=1/2*dim
while(count<genMax){
i=1
for(i in i:np){
trial=0
repeat{ a=floor(runif(1, 1, np+1))
if(a!=i) break 
}#repeat
repeat{ b=floor(runif(1, 1, np+1))
if(b!=i && b!=a) break 
}#repeat
repeat{ c=floor(runif(1, 1, np+1))
if(c!=i && c!=a && c!=b) break
}#repeat
k=1
for(k in 1:dim){
if(runif(1,1,dim)<CR || k==dim){ trial[k]=g[c,k]+g[a,k]-g[b,k] }#if
else{ trial[k]=g[i,k] }#else
}#for for produce trial vector
if(cost[i]>fun(trial[1],trial[2])){ cost[i]=fun(trial[1],trial[2]) 
g[i,]=trial
true=true+1 }#do statistics acording to true values
}#for produce new generetion
curMin[count]=min(cost)
count=count+1
}#while
print(curMin)
print(true)
print("###################################################")
print(min(cost))
}#diffEvol

